/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.jdbc.dao;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Igor
 */
public class ContatoDAO {
    private Connection connection;
    
    public ContatoDAO(){
        this.connection = new ConnectionFactory().getConnection();
    }
    
    public void adiciona(Contato contato){
        String sql = "insert into contatos"+
                "(nome, email, endereco, dataNascimento)" +
                "values(?,?,?,?)";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            
            stmt.setString(1, contato.getNome());
            stmt.setString(2, contato.getEmail());
            stmt.setString(3, contato.getEndereco());
            stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
            
            stmt.execute();
            stmt.close();
            
        } catch (SQLException ex) {
            Logger.getLogger(ContatoDAO.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("Falha ao adicionar um Contato no banco de dados.");
        }
    }
    
    public String pesquisa(String nome){
        String endereco = null;
        String sql = "SELECT endereco FROM contatos WHERE nome = '" + nome + "'";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();
            
            while(rs.next()){
                endereco = rs.getString(1);
            }
            
            rs.close();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(ContatoDAO.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("Não foi encontrado nenhum registro em contatos com o nome = " + nome);
            return null;
        }
        return endereco;
    }
    
    public void alterar(Contato contato){
        String sql = "UPDATE contatos set nome = ?, email = ?, endereco = ?"
                + " WHERE nome = '" + contato.getNome()+"'";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, contato.getNome());
            stmt.setString(2, contato.getEmail());
            stmt.setString(3, contato.getEndereco());
            //stmt.setDate(4, null); Ao colocar a data ocorre um erro de syntaxe
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(ContatoDAO.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("Falha ao alterar o contato com o nome = " + contato.getNome());
        }
        
    }
    
    public void remove(String nome){
        String sql = "DELETE FROM contatos where nome = '" + nome + "'";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(ContatoDAO.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("Falha ao remover um contato com o nome = " + nome);
        }
    }
    
    
}
